package cn.u313.lymusic.activity

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.viewbinding.ViewBinding
import cn.u313.lymusic.R
import cn.u313.lymusic.ui.dialog.loading.LoadingDialog
import cn.u313.lymusic.utils.StatusBarUtil

abstract class BaseAppActivity<T: ViewBinding> : AppCompatActivity() {

    lateinit var vb: T

    val loadingDialog: LoadingDialog by lazy { LoadingDialog(this) }


    // 抽象方法：用于获取 ViewBinding 实例
    abstract fun getViewBinding(): T

    // 抽象方法：用于初始化数据
    abstract fun initData()
    abstract fun iniClick()
    abstract fun observe()
    abstract fun initView()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 获取 ViewBinding 实例并设置为 ContentView
        vb = getViewBinding()
        setContentView(vb.root)
        initView()
        // 初始化数据
        initData()
        observe()
        iniClick()
    }

    fun setSystemBarTransparent() {
        setStatusBar()
    }
    private fun setStatusBar() {
        if (isUseFullScreenMode()) {
            StatusBarUtil.transparencyBar(this)
        } else {
            StatusBarUtil.setStatusBarColor(this, getStatusBarColor())
        }

        if (isUseBlackFontWithStatusBar()) {
            StatusBarUtil.setLightStatusBar(this, true, isUseFullScreenMode())
        }
    }

    /**
     * 是否设置成透明状态栏，即就是全屏模式
     */
    private fun isUseFullScreenMode(): Boolean {
        return true
    }

    /**
     * 更改状态栏颜色，只有非全屏模式下有效
     */
    private fun getStatusBarColor(): Int {
        return R.color.white
    }

    /**
     * 是否改变状态栏文字颜色为黑色，默认为黑色
     */
    private fun isUseBlackFontWithStatusBar(): Boolean {
        return true
    }
    fun showLoading(){
        runCatching {
            if (!loadingDialog.isShowing){
                loadingDialog.show()
            }
        }
    }
    fun hideLoading(){
        runCatching {
            if (loadingDialog.isShowing){
                loadingDialog.dismiss()
            }
        }
    }
}